import lejos.nxt.*;
import java.io.*;
import java.lang.StringBuffer;

/**
 * 
 * Test of leJOS NXT File System.
 * 
 * The example creates a file into leJOS NXT File System. 
 * In this case the file, is a KML file used by Google Earth.
 * If you use the command nxjbrowse, you could
 * download that file and to use with Google Earth.
 * 
 * 2008/04/18
 * Current version has problems when increase the size of the file.
 * 
 * @author Juan Antonio Brenha Moral, JAB
 *
 */

public class FileTest {
	static final String fileName = "route.kml";
	static String text;
	static byte[] byteText;
	static FileOutputStream fos;
	static File f;
	static StringBuffer sb;
	static int fileVersion;
	
	/**
	 * This method convert any String into an Array of bytes
	 * 
	 * @param text to convert
	 * @return An Array of bytes.
	 * @author JAB
	 */ 
    static private byte[] getBytes(String inputText){
    	//Debug Point
        byte[] nameBytes = new byte[inputText.length()+1];
        
        for(int i=0;i<inputText.length();i++){
            nameBytes[i] = (byte) inputText.charAt(i);
        }
        nameBytes[inputText.length()] = 0;
 
        return nameBytes;
    }
    
	/**
	 * This method add data into a file
	 * 
	 * @param text to add
	 * @author JAB
	 */  
    private static void appendToFile(String text) throws IOException{
        byteText = getBytes(text);

        //Critic to add a useless character into file
        //byteText.length-1
        for(int i=0;i<byteText.length-1;i++){
            fos.write((int) byteText[i]);
        }    	
    }
    
	/**
	 * This method returns KML file
	 * 
	 * @return KML File
	 * @author JAB
	 */     
    private static String getKML(){
    	sb = new StringBuffer();
        sb.append("<?xml version='1.0' encoding='UTF-8'?>");
        sb.append("<kml xmlns='http://earth.google.com/kml/2.2'>");
        sb.append("<Document>");
        sb.append("<name>KML Sample generated by NXT Brick</name>");
        sb.append("<open>1</open>");
        sb.append("<description>NXJ Example to use leJOS NXT File System</description>");
        sb.append("<Folder>");
        sb.append("<name>Placemarks</name>");
        sb.append("<description>Placemarks generated by my NXT Brick</description>");
        sb.append("<Placemark>");
        sb.append("<name>Waypoint 1</name>");
        sb.append("<description>Waypoint 1</description>");
        sb.append("<Point><coordinates>-3.49618,40.4233</coordinates></Point>");
        sb.append("</Placemark>");
        
        /*
        sb.append("<Placemark>");
        sb.append("<name>Waypoint 2</name>");
        sb.append("<description>Waypoint 2</description>");
        sb.append("<Point><coordinates>-3.49446,40.4216</coordinates></Point>");
        sb.append("</Placemark>"); 
        sb.append("<Placemark>");
        sb.append("<name>Waypoint 3</name>");
        sb.append("<description>Waypoint 3</description>");
        sb.append("<Point><coordinates>-3.49286,40.419</coordinates></Point>");
        sb.append("</Placemark>");
        */
        sb.append("</Folder>");
        sb.append("</Document>");
        sb.append("</kml>");
        
        return sb.toString();
    }
    
   
    public static void main(String[] args)throws Exception {
    	
    	fileVersion = 1;
        LCD.drawString("Testing leJOS",0,0);
        LCD.drawString("file System",0,1);

        LCD.drawString("Creating file...",0,3);
        LCD.refresh();
        
        try{
            f = new File(fileName);
            if(!f.exists()){
                f.createNewFile();
            }else{
            	f.delete();         	
            	f.createNewFile();
            }
            	
            fos = new  FileOutputStream(f);
            
            text = getKML();
            appendToFile(text);
            
            fos.close();

        }catch(IOException e){
            LCD.drawString(e.getMessage(),0,0);
        }
        
        LCD.drawString("File created",0,4);
        LCD.drawString("Test finished",0,6);
        Thread.sleep(5000);
    }
}
